
package ar.edu.ufasta.presupuestos.logica.entidades.estados;

import java.util.List;

import ar.edu.ufasta.presupuestos.logica.entidades.articulo.DetalleArticulo;
import ar.edu.ufasta.presupuestos.logica.entidades.presupuesto.DetallePresupuesto;
import ar.edu.ufasta.presupuestos.logica.entidades.presupuesto.Presupuesto;
import ar.edu.ufasta.presupuestos.logica.entidades.remito.DetalleRemito;
import ar.edu.ufasta.presupuestos.logica.entidades.remito.RemitoCompra;
import ar.edu.ufasta.presupuestos.servicios.inventario.InventarioFacade;
import ar.edu.ufasta.presupuestos.servicios.persistencia.PersistenceFacade;
import ar.edu.ufasta.presupuestos.servicios.presupuesto.DetailsBuilder;
import ar.edu.ufasta.presupuestos.servicios.presupuesto.RemitoCompraMapper;


/**
 * @author Carlos
 * 
 */
public class Aprovado implements Estado {

	public Integer getCode() {
		
		return 2;
	}

	public String getNombre() {
		return "APROVADO";
	}

	
	
	
	public Integer resolver(Presupuesto presupuesto) {
		int resul=0;
		try {
			Boolean remitos = Boolean.FALSE;
			List<DetallePresupuesto> detalle = presupuesto.getDetallePresupuesto();
			for (DetallePresupuesto item : detalle) {
				List<DetalleArticulo> detallesArticulo = DetailsBuilder.getInstance().getDetallesArticulo(item.getArticulo(), item.getCantidad());
				Boolean pendiente = Boolean.FALSE;
				for (DetalleArticulo dArticulo: detallesArticulo) {
					resul = InventarioFacade.getInstancia().debitaStock(dArticulo.getArticulo(), dArticulo.getCantidad());
					if(resul>0){
						pendiente = Boolean.TRUE;
						DetalleRemito detalleRemito = DetailsBuilder.getInstance().buildDetail(dArticulo.getArticulo(), resul, presupuesto);
						RemitoCompra remitoCompra = RemitoCompraMapper.getInstance().getRemitoCompra(dArticulo.getArticulo());
						remitoCompra.addDetalle(detalleRemito);
					}
				}
//				Marco este detalle como terminado
				//item.setFlags(1);
				item.establecerComoTerminado();
				if(pendiente){
//					Marco este detalle como pendiente
					//item.setFlags(0);
					item.establecerComoPendiente();
					remitos = Boolean.TRUE;
				}
			}
			
			if (remitos) {
				presupuesto.setEstado(new EnProceso());
			}else{
				presupuesto.setEstado(new Terminado());
			}
			
			PersistenceFacade.getInstance().put(presupuesto);
			

		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
		return 1;
	}

}
